﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Web.Mvc;
using ABC.Business.Models;
using ABC.Controllers.ViewModels;
using ABC.Controllers.ViewModels.My;
using ABC.Domain.Entities;
using RosService;
using RosService.Data;

namespace ABC.Controllers.Areas.My
{
    [Authorize]
    public class BsoController : BaseController
    {
        private readonly BsoModel bsoModel;
        private readonly RosModel rosModel;

        public BsoController(BsoModel bsoModel, RosModel rosModel)
        {
            this.bsoModel = bsoModel;
            this.rosModel = rosModel;
        }

        public ActionResult Journal(string pagesize, int? page)
        {
            var model = new MyJournalViewModel();

            if (!page.HasValue)
            {
                page = 1;
            }

            if (string.IsNullOrEmpty(pagesize))
            {
                pagesize = model.ListForPageSize.First().Value;
            }

            if (CurrentUser.IdRBS > 0)
            {
                var q = new Dictionary<string, object>();
                q.Add("СсылкаНаАгента", CurrentUser.IdRBS);

                var data = new Business.RosRBSMigration.МиграцияДанныхClient().Search("БСО", q, Int32.Parse(pagesize), page.Value);

                model.BsoItems = data.Значение
                    .AsEnumerable().Select(r =>
                        new BsoEdit
                        {
                            Id = r.Convert<string>("id_node"),
                            Name = r.Convert<string>("НазваниеОбъекта"),
                            CurrentHolderBsoId = r.Convert<string>("СсылкаНаАгента"),
                            CurrentHolderBsoName = r.Convert<string>("СсылкаНаАгента.НазваниеОбъекта"),
                            InsuredId = r.Convert<string>("СсылкаНаСтрахователя"),
                            InsuredName = r.Convert<string>("СсылкаНаСтрахователя.НазваниеОбъекта"),
                            DateLastStatus = r.Convert<DateTime>("ДатаПоследнегоСтатуса"),
                            InsurancePremium = r.Convert<double>("СтраховаяПремия"),
                            IssuerBlankId = r.Convert<string>("ЭмитентБланка"),
                            IssuerBlankName = r.Convert<string>("ЭмитентБланка.НазваниеОбъекта"),
                            ObjectOfInsuranceId = r.Convert<string>("СсылкаНаОбъектСтрахования"),
                            ObjectOfInsuranceName = r.Convert<string>("СсылкаНаОбъектСтрахования.НазваниеОбъекта"),
                            Status = r.Convert<string>("СтатусБсо"),
                            Event = r.Convert<string>("СобытиеБсо"),
                            TypeBso = r.Convert<string>("Тип.Имя")
                        }).ToList();

                model.PageNumber = Convert.ToInt32(page.Value);
                model.PageCount = Convert.ToInt32(data.PageCount);
            }

            return View(model);
        }

        public ActionResult PolisCard(string id)
        {
            var model = new MyCardBsoViewModel();
            if (!string.IsNullOrEmpty(id))
            {
                model.CardValues = new Business.RosRBSMigration.МиграцияДанныхClient().Get(id, null);
                if (model.CardValues["Агент"] != null && Int32.Parse(model.CardValues["Агент"].ToString()) != CurrentUser.IdRBS)
                {
                    return RedirectToAction("Journal", new { page = 1 });
                }
                var q = new Dictionary<string, object>();
                q.Add("СсылкаНаПолис", id);
                model.ExpectedPayments = new Business.RosRBSMigration.МиграцияДанныхClient().Search("ОжидаемыеПлатежи", q, 25, 1).Значение;
                q = new Dictionary<string, object>();
                q.Add("СсылкаНаБсо", id);
                model.Errors = new Business.RosRBSMigration.МиграцияДанныхClient().Search("Ошибки", q, 25, 1).Значение;
                model.RelatedBso = new Business.RosRBSMigration.МиграцияДанныхClient().Search("СвязанныеБСО", q, 25, 1).Значение;
                model.Acts = new Business.RosRBSMigration.МиграцияДанныхClient().Search("Акты", q, 25, 1).Значение;
            }
            return View(model);
        }

        public ActionResult KvitCard(string id)
        {
            var model = new MyCardBsoViewModel();
            if (!string.IsNullOrEmpty(id))
            {
                model.CardValues = new Business.RosRBSMigration.МиграцияДанныхClient().Get(id, null);
                if (model.CardValues["Агент"] != null && Int32.Parse(model.CardValues["Агент"].ToString()) != CurrentUser.IdRBS)
                {
                    return RedirectToAction("Journal", new { page = 1 });
                }
                var q = new Dictionary<string, object>();
                q.Add("СсылкаНаБсо", id);
                model.RelatedBso = new Business.RosRBSMigration.МиграцияДанныхClient().Search("СвязанныеБСО", q, 25, 1).Значение;
                model.Acts = new Business.RosRBSMigration.МиграцияДанныхClient().Search("Акты", q, 25, 1).Значение;
            }
            return View(model);
        }

        public ActionResult Errors(string pagesize, int? page)
        {
            var model = new MyErrorsViewModel();

            if (!page.HasValue)
                page = 1;

            if (string.IsNullOrEmpty(pagesize))
                pagesize = model.ListForPageSize.First().Value;

            if (Request["status"] != null)
                model.Status = Request["status"];
            else
                model.Status = "atwork";

            if (CurrentUser.IdRBS > 0)
            {
                var q = new Dictionary<string, object>();

                q.Add("СсылкаНаАгента", CurrentUser.IdRBS);

                if (!string.IsNullOrWhiteSpace(model.Status))
                    switch (model.Status)
                    {
                        case "atwork": q.Add("Статус", "В работе,Ожидается обработка");
                            break;
                        case "completed": q.Add("Статус", "Завершен");
                            break;
                    }

                if (!string.IsNullOrWhiteSpace(Request["query"]))
                    q.Add("Поиск", Request["query"]);

                var data = new Business.RosRBSMigration.МиграцияДанныхClient().Search("Ошибки", q, Int32.Parse(pagesize), page.Value);

                model.Table = data.Значение;
                model.PageNumber = page.Value;
                model.PageCount = Convert.ToInt32(data.PageCount);
            }
            return View(model);
        }
    }
}
